The need for a logical way to organize and control revisions has existed for almost as long as writing has been in existence. However, revision control has become much more important, and complicated, with the advent of computer programs.
Large modern software development projects are often developed from complex designs. Often, a software development project can become very complex as the design evolves from the prototype stage to the fully fledged commercialization of the software project. Thus, when developers or others write code based upon a complex design, errors are inevitable. Often, the complexity of the design increases as the software moves from prototyping to commercialization because of additional functionality that is incorporated into the prototype, or from oversights and shortcomings in the design that become apparent to designers and developers over time. Therefore, revision control has become increasingly important for software development.
Often, as a program is developed, program bugs arise from the process of patching, or fixing, problems in the program. As the program bugs are patched, new program bugs can be unexpectedly produced. A program bug is an error, flaw, mistake, failure, or fault in a computer program or system that produces an incorrect or unexpected result, or causes the program to behave in unintended ways. A software regression, is a type of program bug that makes a program feature stop functioning as intended after a certain event, e.g., a program patch is executed. A program performance regression is a type of software regression where the program still functions correctly, but performs slowly or uses more memory when compared to previous versions of the program.
Typically, program bugs arise from mistakes and errors made by people in either a program's source code or design, and a few are caused by compilers producing incorrect code. Program bugs can trigger errors that can in turn have a wide variety of ripple effects, e.g., a systemic spread of an error, with varying levels of inconvenience to the user of the program. Certain program bugs can have subtle effect on a program's functionality, and therefore may go undetected for an extended period of time. In contrast, more serious program bugs may cause the program to completely cease functioning, i.e., a program crash.
In an effort to reduce the time spent tracking down the sources of program bugs, revision control systems are often employed to generate records of the changes made to programs, which can take the form of changesets. A changeset can be helpful in identifying the changes that were made to data included in the program. However, a changeset may not be sufficient to identify the source of a program bug. For example, a changeset may not identify the source of a program bug if the program bug resulted from the interaction of one program with another. Further, as programs are developed numerous updates to line numbering, file names, method classes, and methods can make it very difficult to track down the actual source of a program bug. Tracking down the source of a program bug can be further complicated by compiling errors and errors resulting from two interacting programs being written in different program languages. While revision control systems are helpful in identifying numerous possible causes for a given error, an identification of the actual cause of the error can remain both difficult and time consuming.